There are many applications, particularly in a business environment, where there are needs beyond what can be fulfilled by a single hard disk, regardless of its size, performance or quality level. Many businesses can't afford to have their systems go down for even an hour in the event of a disk failure. They need large storage subsystems with capacities in the terabytes. And they want to be able to insulate themselves from hardware failures to any extent possible. Some people working with multimedia files need fast data transfer exceeding what current drives can deliver, without spending a fortune on specialty drives. These situations require that the traditional “one hard disk per system” model be set aside and a new system employed. This technique is called Redundant Arrays of Inexpensive Disks or RAID. (“Inexpensive” is sometimes replaced with “Independent”, but the former term is the one that was used when the term “RAID” was first coined by the researchers at the University of California at Berkeley, who first investigated the use of multiple-drive arrays in 1987. See D. Patterson, G. Gibson, and R. Katz. “A Case for Redundant Array of Inexpensive Disks (RAID)”, Proceedings of ACM SIGMOD '88, pages 109—116, June 1988.
The fundamental structure of a RAID is the array. An array is a collection of drives that is configured, formatted and managed in a particular way. The number of drives in the array, and the way that data is split between them, is what determines the RAID level, the capacity of the array, and its overall performance and data protection characteristics.
When the operating system (hereafter referred to as “OS”) or an application wants to access the hard disk drive it traditionally employs the system BIOS services to do this. BIOS is the abbreviation for Basic Input Output System. The system BIOS provides basic input and output routines for communicating between the software and the peripherals such as the keyboard, monitor and disk drive. The system BIOS is built-in software that determines what a computer can do without accessing programs from a disks. The system BIOS generally contains all the code required to control the keyboard, monitor, disk drives, serial communications and a number of miscellaneous functions.
The system BIOS is typically placed on a ROM chip that comes with the computer (it is often referred to as a ROM BIOS). This ensures that the BIOS will always be available and will not be damaged by disk failures. It also makes it possible for a computer to boot itself.
Processors in a computer system typically run in 16-bit mode. In this mode various segment registers such as code, data, stack and extended segment registers can be used to access up to 1 MB of system memory for BIOS purposes. It should be noted that the amount of memory that can be accessed or the method to access the memory can differ between motherboards or be modified by one skilled in the art. Currently approximately 1 MB of system memory is available to load the BIOS of all devices in the system.
In a RAID array several disks are grouped together in various organizations to improve either the performance or the reliability of a computer's storage system. These disks are grouped and organized by a RAID controller. Since the system BIOS cannot manage the I/O to a RAID array, each RAID controller in the system has to load its own firmware into the system memory.
On system startup, the system BIOS loads the firmware of all the devices present in the system and allocates code segment and data segment space for each device in the limited 1 MB of system memory. Data and stack segments are set up by the device firmware whereas the code segment is set up by the system BIOS. If the device firmware takes up too much space in system memory it will result in system failure. OEM manufacturers have to follow certain standards set by motherboard manufacturers that limit the firmware and POST (Power On Self Test) sizes between 16 Kb and 32 Kb.
If the system has two compatible RAID cards, the firmware for both the cards will be loaded during startup thereby resulting in a waste of memory resources and increasing startup latency. This occurs because the cards are not aware of each other's presence in the system. If the two RAID controller cards mentioned above have eight channels each, then each controller will allocate 6 channels to storage drives, one channel for a parity drive and the last channel for a hot spare. Thus the system has two parity drives and two hot spares where one of each will suffice. If there are more than two RAID controllers in the system there will be an even greater waste of resources. If the RAID controllers were aware of each others' presence, they could be managed as one entity, POST would need to be run only once, and the latest version of firmware could be used along with optimal use of available channels by combining card resources. In the above example, if the RAID controllers were a commonly managed entity, fourteen channels could be dedicated to storage drives instead of twelve and they could use just one parity drive and hot spare drive.
What is needed is a method to combine the resources of multiple RAID controllers and manage them as a single entity.